# -*- coding: utf-8 -*-
from odoo import http
import akshare as ak
from odoo.http import request

nameMap = {
    '黑龙江省': '黑龙江',
    '吉林省': '吉林',
    '辽宁省': '辽宁',
    '北京市': '北京',
    '天津市': '天津',
    '上海市': '上海',
    '河北省': '河北',
    '河南省': '河南',
    '山东省': '山东',
    '湖南省': '湖南',
    '浙江省': '浙江',
    '湖北省': '湖北',
    '四川省': '四川',
    '西藏自治区': '西藏',
    '青海省': '青海',
    '宁夏回族自治区': '宁夏',
    '重庆市': '重庆',
    '云南省': '云南',
    '贵州省': '贵州',
    '广西壮族自治区': '广西',
    '广东省': '广东',
    '内蒙古自治区': '内蒙古',
    '山西省': '山西',
    '江苏省': '江苏',
    '陕西省': '陕西',
    '甘肃省': '甘肃',
    '江西省': '江西',
    '海南省': '海南',
    '安徽省': '安徽',
    '福建省': '福建',
    '台湾省': '台湾',
    '香港特别行政区': '香港',
    '澳门特别行政区': '澳门',
    '新疆维吾尔自治区': '新疆',
}


class CovStatisicsPage(http.Controller):
    @http.route('/data/map', type='json', auth='user')
    def data_stat(self, **kwargs):
        data = dict()
        data['news_target'] = self.__news_data()
        data['province_data'] = self.__data_hot_map()
        data['history_data'] = self.__history_data()
        return data

    @http.route('/data/line', type='json', auth='user')
    def data_line(self, **kwargs):
        data = dict()
        data['history_data'] = self.__history_data(**kwargs)
        return data

    @staticmethod
    def __news_data():
        news = ak.covid_19_163(indicator="实时资讯新闻播报")
        a_target = """<a href="{}">{}</a><br/><br/>"""
        news_target = ""
        for inx in news.index:
            col = news.loc[inx]
            news_target += a_target.format(col[-1], f"{inx +1 }.{col[0]}")
            if inx >= 9:
                break
        news_target = f"""<div>{news_target}</div>"""
        return news_target

    @staticmethod
    def __data_hot_map():
        objs = request.env['cov.province.statistics'].search([])
        data = []
        for obj in objs:
            name = nameMap.get(obj.province.name, False)
            if name:
                val = {'name': name, 'value': obj.total}
                data.append(val)
        return data

    def __history_data(self, **kwargs):

        objs = request.env['cov.history'].search([], order='cov_date')
        if kwargs.get('domain', '') == 'cov_suspect':
            data = self.__get_his_date_by_kw(objs, 'cov_suspect')
        elif kwargs.get('domain', '') == 'cov_heal':
            data = self.__get_his_date_by_kw(objs, 'cov_heal')
        elif kwargs.get('domain', '') == 'cov_dead':
            data = self.__get_his_date_by_kw(objs, 'cov_dead')
        elif kwargs.get('domain', '') == 'cov_severe':
            data = self.__get_his_date_by_kw(objs, 'cov_severe')
        elif kwargs.get('domain', '') == 'cov_abroad':
            data = self.__get_his_date_by_kw(objs, 'cov_abroad')
        else:
            data = self.__get_his_date_by_kw(objs, 'cov_confirm')
        return data

    @staticmethod
    def __get_his_date_by_kw(objs, field_name):
        data = {'cov_date': [],
                'value': []
                }

        for obj in objs:
            data['cov_date'].append(obj.cov_date)
            data['value'].append(obj[field_name])
        return data
